<?php

// 雪里开简易预约制访客管理系统 V1.0（2025.05.20）
// 演示地址: http://fangke.chalide.cn
// 更新关注: /weivote/yuyuefangke
// 文件路径: inc/pubs.php
// 文件大小: 5229 字节
// 最后修改时间: 2025-05-20 21:53:54
// 作者: yujianyue
// 邮件: 15058593138@qq.com
// 版权所有,保留发行权和署名权
/**
 * 公共函数文件
 * 功能反馈:15058593138@qq.com
 */

// 输出JSON格式数据
function json_output($code, $msg = '', $data = null) {
    $result = [
        'code' => $code,
        'msg' => $msg
    ];
    
    if ($data !== null) {
        $result['data'] = $data;
    }
    
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

// 输出JSON成功消息
function json_success($msg = '操作成功', $data = null) {
    json_output(0, $msg, $data);
}

// 输出JSON错误消息
function json_error($msg = '操作失败', $data = null) {
    json_output(1, $msg, $data);
}

// 获取GET参数
function get_param($key, $default = '') {
    return isset($_GET[$key]) ? trim($_GET[$key]) : $default;
}

// 获取POST参数
function post_param($key, $default = '') {
    return isset($_POST[$key]) ? trim($_POST[$key]) : $default;
}

// 安全过滤字符串
function safe_string($str) {
    return htmlspecialchars(trim($str), ENT_QUOTES);
}

// 检查是否登录
function check_login($type = '') {
    if (!isset($_SESSION['user_id']) || !isset($_SESSION['user_type'])) {
        return false;
    }
    
    if ($type && $_SESSION['user_type'] !== $type) {
        return false;
    }
    
    return true;
}

// 生成随机字符串
function random_string($length = 6) {
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $result = '';
    for ($i = 0; $i < $length; $i++) {
        $result .= $chars[mt_rand(0, strlen($chars) - 1)];
    }
    return $result;
}

// 生成唯一的访客码
function generate_visit_code() {
    return strtoupper(substr(md5(uniqid(mt_rand(), true)), 0, 8));
}

// 获取当前日期
function get_current_date() {
    return date('Y-m-d');
}

// 获取当前日期时间
function get_current_datetime() {
    return date('Y-m-d H:i:s');
}

// 导入CSV数据到数据库
function import_csv_to_db($file, $table, $fields, $db) {
    if (!file_exists($file)) {
        return ['code' => 1, 'msg' => '文件不存在'];
    }
    
    $handle = fopen($file, 'r');
    if (!$handle) {
        return ['code' => 1, 'msg' => '无法打开文件'];
    }
    
    $success = 0;
    $fail = 0;
    $line = 0;
    
    while (($data = fgetcsv($handle, 1000, "\t")) !== false) {
        $line++;
        
        // 跳过第一行（可能是标题）
        if ($line === 1 && isset($_POST['skip_first']) && $_POST['skip_first'] == 1) {
            continue;
        }
        
        // 字段数量检查
        if (count($data) < count($fields)) {
            $fail++;
            continue;
        }
        
        $insert_data = [];
        foreach ($fields as $index => $field) {
            if (isset($data[$index])) {
                $insert_data[$field] = $data[$index];
            }
        }
        
        if ($db->insert($table, $insert_data)) {
            $success++;
        } else {
            $fail++;
        }
    }
    
    fclose($handle);
    
    return [
        'code' => 0,
        'msg' => '导入完成',
        'data' => [
            'success' => $success,
            'fail' => $fail,
            'total' => $success + $fail
        ]
    ];
}

// 获取IP地址
function get_client_ip() {
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

// 格式化日期
function format_date($date, $format = 'Y-m-d') {
    if (!$date) return '';
    return date($format, strtotime($date));
}

// 分页HTML生成
function paginate($page, $totalPage, $pageUrl) {
    if ($totalPage <= 1) return '';
    
    $html = '<div class="page">';
    
    // 首页按钮
    if ($page > 1) {
        $html .= '<a href="javascript:void(0)" onclick="loadPage(1)" class="page-btn">首页</a>';
    } else {
        $html .= '<span class="page-btn disabled">首页</span>';
    }
    
    // 上一页按钮
    if ($page > 1) {
        $html .= '<a href="javascript:void(0)" onclick="loadPage(' . ($page - 1) . ')" class="page-btn">上一页</a>';
    } else {
        $html .= '<span class="page-btn disabled">上一页</span>';
    }
    
    // 页码下拉框
    $html .= '<select class="page-select" onchange="loadPage(this.value)">';
    for ($i = 1; $i <= $totalPage; $i++) {
        $selected = $i == $page ? ' selected' : '';
        $html .= '<option value="' . $i . '"' . $selected . '>第' . $i . '页</option>';
    }
    $html .= '</select>';
    
    // 下一页按钮
    if ($page < $totalPage) {
        $html .= '<a href="javascript:void(0)" onclick="loadPage(' . ($page + 1) . ')" class="page-btn">下一页</a>';
    } else {
        $html .= '<span class="page-btn disabled">下一页</span>';
    }
    
    // 末页按钮
    if ($page < $totalPage) {
        $html .= '<a href="javascript:void(0)" onclick="loadPage(' . $totalPage . ')" class="page-btn">末页</a>';
    } else {
        $html .= '<span class="page-btn disabled">末页</span>';
    }
    
    $html .= '</div>';
    
    return $html;
}
?>
